Many computer platforms use an execution environment to run workloads. An execution environment may be an operating system, or other software construct that provides an interface between hardware and software in many computing systems. An operating system may manage various hardware resources and provide a common interface for a software workload, which may be an application. A virtual machine may be a software construct that may provide an interface between an operating system, hypervisor, or other software component and the software workload.
Some virtual machines may operate as a full replication of a hardware platform such that a complete operating system may be executed within a virtual machine. In other cases, a virtual machine may be an execution environment that may manage execution of one or more applications. Such virtual machines may be known as process virtual machines or application virtual machines. In such a case, the virtual machine may provide some functions that conventional operating systems may provide, such as memory management, compute management, and input/output management.
In many cases, application programs call routines in an execution environment to access memory, peripheral devices, storage devices, network connections, input/output devices, and other resources. The execution environment may perform various low level management of resources so that an application programmer may not have to deal with the details of interfacing with the various resources.
Conventional execution environments may be designed for general purpose use, where the execution environment may support many different types of applications. Some applications may be computationally intensive, while other applications may consume and produce data from one of the various peripheral devices. Each type of application may use the resources in a different manner, yet because a conventional execution environment may support any type of application, the design and configuration of the execution environment may be generic. Such an execution environment may not be optimized for any one type of application.
Some execution environments may be tunable to some extent. A tunable execution environment may be configured in a customized manner, then compiled to create a customized execution environment. In addition, some execution environments may have parameters that can be changed to vary some aspects of the execution environment performance.